<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222"><meta name="generator" content="Hexo 7.3.0">

  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.ico">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.ico">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">



<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha256-wiz7ZSCn/btzhjKDQBms9Hx4sSeUYsDrTLg7roPstac=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancyapps-ui/5.0.28/fancybox/fancybox.css" integrity="sha256-6cQIC71/iBIYXFK+0RHAvwmjwWzkWd+r7v/BX3/vZDc=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pace/1.2.4/themes/green/pace-theme-minimal.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/pace/1.2.4/pace.min.js" integrity="sha256-gqd7YTjg/BtfqWSwsJOvndl0Bxc8gFImLEkXQT8+qj0=" crossorigin="anonymous"></script>

<script class="next-config" data-name="main" type="application/json">{"hostname":"sumumm.github.io","root":"/","images":"/images","scheme":"Gemini","darkmode":false,"version":"8.19.2","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":{"enable":true,"style":"mac"},"fold":{"enable":true,"height":300},"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":true,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":true,"async":true,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果：${query}","hits_time":"找到 ${hits} 个搜索结果（用时 ${time} 毫秒）","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false}}</script><script src="/js/config.js"></script>

    <meta name="description" content="本文主要是攻克视频技术课程视频编码——帧内预测：如何减少空间冗余？的相关笔记，若笔记中有错误或者不合适的地方，欢迎批评指正😃。">
<meta property="og:type" content="article">
<meta property="og:title" content="LV03-视频编码-03-帧内预测">
<meta property="og:url" content="https://sumumm.github.io/post/e4c325ee.html">
<meta property="og:site_name" content="苏木">
<meta property="og:description" content="本文主要是攻克视频技术课程视频编码——帧内预测：如何减少空间冗余？的相关笔记，若笔记中有错误或者不合适的地方，欢迎批评指正😃。">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/5c0a24c3d52e8yy2de20fb07b58c625b.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/03b05d50574c17ed523f9164929019e7.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/c4yy0c94ba713d778fd81917238863d8.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/8185bc4a93669c2a800f5cf0743f7091.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/a15b484807812294b00f1aebcbc942f5.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/85de3eafb25bff062e821f83f11236ff.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/0yyb8202b3dd85233975ea3cffc13b6b.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/a6b8b26163ca9d9274377b5735785f06.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/110b13f5d5af1d119b6f2a559e39f7a1.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/4f10404d6fc9e3625092d92090aed6b7.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/fcbdf7eaec95fea21158b4ce1047ed93.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/63b391728df65ce7551012753ae331ce.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/c5d488c6a80b9c27ba50048fb4ef4cbf.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/120761b8313c18c7433f7708d8b4a140.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/6a3ab22c2570589ac2680c561be0c5bc.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/835d3ec11768f9928098ab2e54556466.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/5e13e4207abd6788b189d9e86669665d.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/7bbb469c4f050a098b0744ea3cc94e59.jpg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/53ddf8a40698cb99e48f103206b149f8.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/e303d85a11dced7978cedea604f001e6.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/b09910c6bc61b97924a52dcd89c04824.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/4yyf0416de0dda660b69cb3b59b36ff2.jpeg">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/eea93f2ace612181dfe81e34dd5e532d.jpg">
<meta property="article:published_time" content="2024-01-30T23:44:35.000Z">
<meta property="article:modified_time" content="2025-06-13T16:25:57.065Z">
<meta property="article:author" content="苏木">
<meta property="article:tag" content="极客时间-攻克视频技术">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/5c0a24c3d52e8yy2de20fb07b58c625b.jpg">


<link rel="canonical" href="https://sumumm.github.io/post/e4c325ee.html">



<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":false,"isPost":true,"lang":"zh-CN","comments":true,"permalink":"https://sumumm.github.io/post/e4c325ee.html","path":"post/e4c325ee.html","title":"LV03-视频编码-03-帧内预测"}</script>

<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>LV03-视频编码-03-帧内预测 | 苏木</title>
  








    <script src="/js/browser_tools_disable.js"></script>

  <noscript>
    <link rel="stylesheet" href="/css/noscript.css">
  </noscript>
<!-- hexo injector head_end start --><link rel="stylesheet" href="https://unpkg.com/hexo-next-tags-plus@latest/lib/tag_plus.css" media="defer" onload="this.media='all'"><!-- hexo injector head_end end --></head>

<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  <div class="headband"></div>

  <main class="main">
    <div class="column">
      <header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏" role="button">
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <i class="logo-line"></i>
      <p class="site-title">苏木</p>
      <i class="logo-line"></i>
    </a>
      <p class="site-subtitle" itemprop="description">我的学习之路</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger" aria-label="搜索" role="button">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>



<nav class="site-nav">
  <ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>苏木的家</a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类页<span class="badge">42</span></a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档页<span class="badge">673</span></a></li><li class="menu-item menu-item-flink"><a href="/flink/" rel="section"><i class="fa fa-link fa-fw"></i>友人帐</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于我</a></li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup"><div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off" maxlength="80"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close" role="button">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div class="search-result-container no-result">
  <div class="search-result-icon">
    <i class="fa fa-spinner fa-pulse fa-5x"></i>
  </div>
</div>

    </div>
  </div>

</header>
        
  
  <aside class="sidebar">

    <div class="sidebar-inner sidebar-nav-active sidebar-toc-active">
      <ul class="sidebar-nav">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <div class="sidebar-panel-container">
        <!--noindex-->
        <div class="post-toc-wrap sidebar-panel">
            <div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%B8%80%E3%80%81%E4%B8%8D%E5%90%8C%E5%9D%97%E5%A4%A7%E5%B0%8F%E7%9A%84%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B%E6%A8%A1%E5%BC%8F"><span class="nav-text">一、不同块大小的帧内预测模式</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#1-4-x-4-%E4%BA%AE%E5%BA%A6%E5%9D%97%E7%9A%84%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B%E6%A8%A1%E5%BC%8F"><span class="nav-text">1. 4 x 4 亮度块的帧内预测模式</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#1-1-Vertical-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.1 Vertical 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-2-Horizontal-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.2 Horizontal 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-3-DC-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.3 DC 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-4-Diagonal-Down-Left-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.4 Diagonal Down-Left 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-5-Diagonal-Down-Right-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.5 Diagonal Down-Right 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-6-Vertical-Right-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.6 Vertical-Right 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-7-Horizontal-Down-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.7 Horizontal-Down 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-8-Vertical-Left-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.8 Vertical-Left 模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#1-9-Horizontal-Up-%E6%A8%A1%E5%BC%8F"><span class="nav-text">1.9 Horizontal-Up 模式</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-16-x-16-%E4%BA%AE%E5%BA%A6%E5%9D%97%E7%9A%84%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B%E6%A8%A1%E5%BC%8F"><span class="nav-text">2. 16 x 16 亮度块的帧内预测模式</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#3-8-x-8-%E8%89%B2%E5%BA%A6%E5%9D%97%E7%9A%84%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B%E6%A8%A1%E5%BC%8F"><span class="nav-text">3. 8 x 8 色度块的帧内预测模式</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%BA%8C%E3%80%81%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B%E6%A8%A1%E5%BC%8F%E7%9A%84%E9%80%89%E6%8B%A9"><span class="nav-text">二、帧内预测模式的选择</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%B8%89%E3%80%81%E5%B0%8F%E7%BB%93"><span class="nav-text">三、小结</span></a></li></ol></div>
        </div>
        <!--/noindex-->

        <div class="site-overview-wrap sidebar-panel">
          <div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="苏木"
      src="/images/avatar.jpg">
  <p class="site-author-name" itemprop="name">苏木</p>
  <div class="site-description" itemprop="description">莫道桑榆晚，为霞尚满天</div>
</div>
<div class="site-state-wrap animated">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
        <a href="/archives/">
          <span class="site-state-item-count">673</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
          <a href="/categories/">
        <span class="site-state-item-count">42</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">43</span>
        <span class="site-state-item-name">标签</span>
      </div>
  </nav>
</div>
  <div class="links-of-author animated">
      <span class="links-of-author-item">
        <a href="https://github.com/sumumm" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;sumumm" rel="noopener me" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
      </span>
  </div>

        </div>
      </div>
    </div>

    
  </aside>


    </div>

    <div class="main-inner post posts-expand">


  


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://sumumm.github.io/post/e4c325ee.html">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.jpg">
      <meta itemprop="name" content="苏木">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="苏木">
      <meta itemprop="description" content="莫道桑榆晚，为霞尚满天">
    </span>

    <span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
      <meta itemprop="name" content="LV03-视频编码-03-帧内预测 | 苏木">
      <meta itemprop="description" content="">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          LV03-视频编码-03-帧内预测
        </h1>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2024-01-31 07:44:35" itemprop="dateCreated datePublished" datetime="2024-01-31T07:44:35+08:00">2024-01-31</time>
    </span>
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-folder"></i>
      </span>
      <span class="post-meta-item-text">分类于</span>
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/" itemprop="url" rel="index"><span itemprop="name">嵌入式开发</span></a>
        </span>
          ，
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/" itemprop="url" rel="index"><span itemprop="name">04音视频</span></a>
        </span>
          ，
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/" itemprop="url" rel="index"><span itemprop="name">极客时间-攻克视频技术</span></a>
        </span>
    </span>

  
    <span class="post-meta-break"></span>
    <span class="post-meta-item" title="本文字数">
      <span class="post-meta-item-icon">
        <i class="far fa-file-word"></i>
      </span>
      <span class="post-meta-item-text">本文字数：</span>
      <span>6.2k</span>
    </span>
    <span class="post-meta-item" title="阅读时长">
      <span class="post-meta-item-icon">
        <i class="far fa-clock"></i>
      </span>
      <span class="post-meta-item-text">阅读时长 &asymp;</span>
      <span>23 分钟</span>
    </span>
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody"><p>本文主要是攻克视频技术课程视频编码——帧内预测：如何减少空间冗余？的相关笔记，若笔记中有错误或者不合适的地方，欢迎批评指正😃。</p>
<span id="more"></span>

<!-- Photo: https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/ -->

<details class="folding-tag" blue><summary> 点击查看使用工具及版本 </summary>
              <div class='content'>
              <table>    <tr>        <td align="center" width=150px>Windows</td>        <td align="left">windows11</td>    </tr>    <tr>        <td align="center">Ubuntu</td>        <td align="left">Ubuntu16.04的64位版本</td>      </tr>    <tr>        <td align="center">VMware® Workstation 16 Pro</td>        <td align="left">16.2.3 build-19376536</td>      </tr></table>
              </div>
            </details>

<details class="folding-tag" blue><summary> 点击查看本文参考资料 </summary>
              <div class='content'>
              <table>    <tr><td align="center">参考方向  </td><td align="center">参考原文</td></tr>    <tr><td align="left">---</td><td align="left"><a href="" target="_blank">--- <i class="fa fa-external-link-alt"></i> </a></td></tr></table>
              </div>
            </details>

<details class="folding-tag" blue><summary> 点击查看相关文件下载 </summary>
              <div class='content'>
              <table>    <tr>        <td align="center">---</td>        <td align="left">--- <a href="" target="_blank">  <i class="fa fa-external-link-alt"></i></a></td>      </tr></table>
              </div>
            </details>

<p>前面几节课我们一起讨论了视频编码的原理以及编码码流结构，从今天开始我们一起来聊一聊具体的编码模式。</p>
<p>我们知道在视频编码时主要需要减少 4 个冗余，包括：空间冗余、时间冗余、视觉冗余和信息熵冗余。其中空间冗余就是通过帧内预测的方式来实现的。那帧内预测到底是怎么做到减少空间冗余的呢？</p>
<p>其实一般来说，<strong>一幅图像中相邻像素的亮度和色度信息是比较接近的，并且亮度和色度信息也是逐渐变化的，不太会出现突变</strong>。也就是说，<strong>图像具有空间相关性</strong>。帧内预测就是利用这个特点来进行的。即<strong>帧内预测通过利用已经编码的相邻像素的值来预测待编码的像素值，最后达到减少空间冗余的目的</strong>。</p>
<p>这里需要注意的一个点就是，我们是通过已经编码了的像素值去预测待编码的像素值。你可能会问，已经编码了的像素值变成码流了，不再是一个个像素了，怎么去预测待编码的像素呢？其实已经编码了的像素是会重建成重建像素，用来做之后待编码块的参考像素的。你可以认为是<strong>已经编码的块会解码成像素用来做参考像素</strong>。</p>
<p>好了，我们已经知道了帧内预测是怎么减少空间冗余的，那我们还有一个最重要的问题要解答。既然帧内预测是通过相邻像素来预测待编码像素的，那它到底是怎么预测的呢？下面我们就以 H264 标准来讲解每种帧内预测模式是怎么做预测的。</p>
<h1 id="一、不同块大小的帧内预测模式"><a href="#一、不同块大小的帧内预测模式" class="headerlink" title="一、不同块大小的帧内预测模式"></a><font size=3>一、不同块大小的帧内预测模式</font></h1><p>我们在视频编码原理的那节课里面讲过，视频编码是以块为单位进行的。<strong>在 H264 标准里面，块分为宏块和子块。宏块的大小是 16 x 16（YUV 4:2:0 图像亮度块为 16 x 16，色度块为 8 x 8）</strong>。在帧内预测中，亮度宏块可以继续划分成 16 个 4 x 4 的子块。因为图像中有的地方细节很多，我们需要划分成更小的块来做预测会更精细，所以会将宏块再划分成 4 x 4 的子块。如下图所示：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/5c0a24c3d52e8yy2de20fb07b58c625b.jpg" alt="img" style="zoom:50%;" />

<p>帧内预测是根据块的大小分为不同的预测模式的。还有一个点就是亮度块和色度块的预测是分开进行的。这里我给你总结一下，主要有以下 3 点规则：</p>
<ul>
<li>（1）宏块大小是 16 x 16，其中亮度块为 16 x 16，色度块为 8 x 8；</li>
<li>（2）帧内预测中亮度块和色度块是分开独立进行预测的，即亮度块参考已编码亮度块的像素，而色度块参考已编码色度块的像素；</li>
<li>（3）16 x 16 的亮度块可以继续划分成 16 个 4 x 4 的子块。</li>
</ul>
<p>所以，我们在实际帧内预测的时候就会分为：4 x 4 亮度块的预测、16 x 16 亮度块的预测、8 x 8 色度块的预测（注意亮度 8 x 8 模式和 I_PCM 模式很少使用，我们这里不做讨论）。下面我们就开始一个个展开来讨论吧。</p>
<h2 id="1-4-x-4-亮度块的帧内预测模式"><a href="#1-4-x-4-亮度块的帧内预测模式" class="headerlink" title="1. 4 x 4 亮度块的帧内预测模式"></a><font size=3>1. 4 x 4 亮度块的帧内预测模式</font></h2><p>因为 4 x 4 的块帧内预测模式最多，并且基本包含亮度 16 x 16 和色度 8 x 8 的模式，所以我们接下来先从 4 x 4 亮度块的帧内预测模式讲起。</p>
<p>4 x 4 亮度块的帧内预测模式总共有 9 个。其中有 <strong>8 种方向模式和一种 DC 模式</strong>，且方向模式指的是预测是有方向角度的。好了，那我们接下来就聊聊这 9 种模式吧。</p>
<h3 id="1-1-Vertical-模式"><a href="#1-1-Vertical-模式" class="headerlink" title="1.1 Vertical 模式"></a><font size=3>1.1 Vertical 模式</font></h3><p><strong>Vertical 模式就是指，当前编码亮度块的每一列的像素值，都是复制上边已经编码块的最下面那一行的对应位置的像素值。</strong>这句有点拗口，别急，等会儿我会给出计算方法和示意图，让你能很容易地理解它。</p>
<p><strong>Vertical 模式得到的预测块同一列中的像素值都是一样的。</strong>该模式得到的块就叫做 Vertical 预测块。注意，<strong>该模式只有在上边块存在的时候才可用，如果不存在则该模式不可用</strong>。比如图像最上边的块就没有可参考的块存在。</p>
<p>该模式下预测块像素计算方法如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/03b05d50574c17ed523f9164929019e7.jpg" alt="img" style="zoom:50%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/c4yy0c94ba713d778fd81917238863d8.png" alt="img" style="zoom:50%;" />

<h3 id="1-2-Horizontal-模式"><a href="#1-2-Horizontal-模式" class="headerlink" title="1.2 Horizontal 模式"></a><font size=3>1.2 Horizontal 模式</font></h3><p><strong>Horizontal 模式就是指，当前编码亮度块的每一行的像素值，都是复制左边已经编码块的最右边那一列的对应位置的像素值</strong>（同样地，下面有计算方法和示意图）。<strong>Horizontal 模式得到的预测块同一行的像素值都是一样的</strong>，该模式得到的块就叫做 Horizontal 预测块。注意，<strong>该模式只有在左边块存在的时候才可用，如果不存在则该模式不可用</strong>。比如图像最左边的块就没有可参考的块存在。</p>
<p>该模式下预测块像素计算方法如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/8185bc4a93669c2a800f5cf0743f7091.jpg" alt="img" style="zoom:50%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/a15b484807812294b00f1aebcbc942f5.png" alt="img" style="zoom:50%;" />

<h3 id="1-3-DC-模式"><a href="#1-3-DC-模式" class="headerlink" title="1.3 DC 模式"></a><font size=3>1.3 DC 模式</font></h3><p><strong>DC 模式就是指，当前编码亮度块的每一个像素值，是上边已经编码块的最下面那一行和左边已编码块右边最后一列的所有像素值的平均值。</strong>注意<strong>，DC 模式预测得到的块中每一个像素值都是一样的</strong>。DC 模式得到的块就叫做 DC 预测块。</p>
<p>根据上边块和左边块是不是存在，该模式下预测块像素的计算方法分为以下四种情况：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/85de3eafb25bff062e821f83f11236ff.jpg" alt="img" style="zoom:45%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/0yyb8202b3dd85233975ea3cffc13b6b.png" alt="img" style="zoom:45%;" />

<h3 id="1-4-Diagonal-Down-Left-模式"><a href="#1-4-Diagonal-Down-Left-模式" class="headerlink" title="1.4 Diagonal Down-Left 模式"></a><font size=3>1.4 Diagonal Down-Left 模式</font></h3><p><strong>Diagonal Down-Left 模式是上边块和右上块</strong>（上边块和右上块有可能是一个块，因为可能是一个 16 x 16 的亮度块，意思理解就可以）<strong>的像素通过插值得到。如果上边块和右上块不存在则该模式无效</strong>。</p>
<p>该模式下预测块计算的方法分为下面两种情况：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/a6b8b26163ca9d9274377b5735785f06.jpg" alt="img" style="zoom:45%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/110b13f5d5af1d119b6f2a559e39f7a1.png" alt="img" style="zoom:45%;" />

<h3 id="1-5-Diagonal-Down-Right-模式"><a href="#1-5-Diagonal-Down-Right-模式" class="headerlink" title="1.5 Diagonal Down-Right 模式"></a><font size=3>1.5 Diagonal Down-Right 模式</font></h3><p><strong>Diagonal Down-Right 模式需要通过上边块、左边块和左上角对角的像素通过插值得到。如果这三个有一个不存在则该模式无效。</strong></p>
<p>该模式下预测块计算的方法有以下三种情况：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/4f10404d6fc9e3625092d92090aed6b7.jpg" alt="img" style="zoom:45%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/fcbdf7eaec95fea21158b4ce1047ed93.png" alt="img" style="zoom:45%;" />

<h3 id="1-6-Vertical-Right-模式"><a href="#1-6-Vertical-Right-模式" class="headerlink" title="1.6 Vertical-Right 模式"></a><font size=3>1.6 Vertical-Right 模式</font></h3><p><strong>Vertical-Right 模式是需要通过上边块、左边块以及左上角对角的像素插值得到的</strong>。必须要这三个都有效才能使用，否则该模式无效。</p>
<p>该模式下预测块计算的方法有以下四种情况：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/63b391728df65ce7551012753ae331ce.jpg" alt="img" style="zoom:45%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/c5d488c6a80b9c27ba50048fb4ef4cbf.png" alt="img" style="zoom: 50%;" />

<h3 id="1-7-Horizontal-Down-模式"><a href="#1-7-Horizontal-Down-模式" class="headerlink" title="1.7 Horizontal-Down 模式"></a><font size=3>1.7 Horizontal-Down 模式</font></h3><p><strong>Horizontal-Down 模式需要通过上边块、左边块以及左上角对角的像素插值得到。必须要这三个都有效才能使用，否则该模式无效。</strong></p>
<p>该模式下预测块计算的方法有以下四种情况：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/120761b8313c18c7433f7708d8b4a140.jpg" alt="img" style="zoom:45%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/6a3ab22c2570589ac2680c561be0c5bc.png" alt="img" style="zoom:45%;" />

<h3 id="1-8-Vertical-Left-模式"><a href="#1-8-Vertical-Left-模式" class="headerlink" title="1.8 Vertical-Left 模式"></a><font size=3>1.8 Vertical-Left 模式</font></h3><p><strong>Vertical-Left 模式是需要通过上边块和右上块</strong>（上边块和右上块有可能是一个块，因为可能是一个 16 x 16 的亮度块，意思理解就可以）<strong>最下面一行的像素通过插值得到</strong>。如果这两种块不存在则该模式不可用。该模式下预测块的计算方法有下面两种情况：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/835d3ec11768f9928098ab2e54556466.jpg" alt="img" style="zoom:45%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/5e13e4207abd6788b189d9e86669665d.png" alt="img" style="zoom:45%;" />

<h3 id="1-9-Horizontal-Up-模式"><a href="#1-9-Horizontal-Up-模式" class="headerlink" title="1.9 Horizontal-Up 模式"></a><font size=3>1.9 Horizontal-Up 模式</font></h3><p><strong>Horizontal-Up 模式是需要通过左边块的像素通过插值得到的</strong>。如果左边块不存在，则该模式不可用。</p>
<p>该模式下预测块的计算方法有下面四种情况：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/7bbb469c4f050a098b0744ea3cc94e59.jpg" alt="img" style="zoom:45%;" />

<p>示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/53ddf8a40698cb99e48f103206b149f8.png" alt="img" style="zoom:45%;" />

<h2 id="2-16-x-16-亮度块的帧内预测模式"><a href="#2-16-x-16-亮度块的帧内预测模式" class="headerlink" title="2. 16 x 16 亮度块的帧内预测模式"></a><font size=3>2. 16 x 16 亮度块的帧内预测模式</font></h2><p>上面我们讲了 4 x 4 亮度块的 9 种预测模式，接下来我们来聊一下 16 x 16 亮度块的预测模式。</p>
<p><strong>16 x 16 亮度块总共有4种预测模式。它们分别是Vertical模式，Horizontal模式、DC 模式和Plane 模式</strong>，前面三种模式跟 4 x 4 的原理是一样的这里就不重复讲解了。16 x 16 亮度块的帧内预测的 4 种模式的示意图如下：</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/e303d85a11dced7978cedea604f001e6.png" alt="img" style="zoom:50%;" />

<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/b09910c6bc61b97924a52dcd89c04824.png" alt="img" style="zoom:50%;" />



<p>接下来我们介绍一下 Plane 模式。这种模式相比前面三种模式稍微复杂一些，但是基本原理都差不多。<strong>Plane 预测块的每一个像素值，都是将上边已编码块的最下面那一行，和左边已编码块右边最后一列的像素值经过下面公式计算得到的。</strong></p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/4yyf0416de0dda660b69cb3b59b36ff2.jpeg" alt="img" style="zoom:25%;" />

<h2 id="3-8-x-8-色度块的帧内预测模式"><a href="#3-8-x-8-色度块的帧内预测模式" class="headerlink" title="3. 8 x 8 色度块的帧内预测模式"></a><font size=3>3. 8 x 8 色度块的帧内预测模式</font></h2><p>上面我们讲述了亮度块的帧内预测模式，接下来我们简单介绍一下色度块的帧内预测模式。</p>
<p>8 x 8 色度块的帧内预测模式跟 16 x 16 亮度块的是一样的，也是总共有 4 种，分别为 DC 模式、Vertical 模式，Horizontal 模式、Plane 模式。与 16 x 16 亮度块不同的是，块大小不同，所以参考像素值数量会不同。但是基本是一致的，这里就不重复了。</p>
<h1 id="二、帧内预测模式的选择"><a href="#二、帧内预测模式的选择" class="headerlink" title="二、帧内预测模式的选择"></a><font size=3>二、帧内预测模式的选择</font></h1><p>现在我们学习了这么多的模式，而每一个块却只能有一种帧内预测模式。那我们怎么确定一个块到底使用哪种模式呢？我们这边先把思路讲一讲，具体细节不展开。等到你把编码基础弄明白了之后可以阅读一下 x264 的代码，里面有关于具体如何去选择模式的方法。</p>
<p>以亮度块为例。一个 16 x 16 的亮度块，我们可以不划分，直接使用 4 种 16 x 16 的帧内预测模式，最多得到 4 种预测块；也可以划分成 16 个 4 x 4 的子块，每一个子块最多有 9 种帧内预测模式。</p>
<p>对于每一个块或者子块，我们可以得到预测块，再用实际待编码的块减去预测块就可以得到残差块。主要有下面 3 种方案来得到最优预测模式：</p>
<ul>
<li>第一种方案，先对每一种预测模式的残差块的像素值求绝对值再求和，称之为 cost，然后取其中残差块绝对值之和也就是 cost 最小的预测模式为最优预测模式。</li>
<li>第二种方案，对残差块先进行 Hadamard 变换（在 DCT 变换和量化那节课中会介绍），变换到频域之后再求绝对值求和，同样称为 cost，然后取 cost 最小的预测模式为最优预测模式。</li>
<li>第三种方案，也可以对残差块直接进行 DCT 变换量化熵编码，计算得到失真大小和编码后的码流大小，然后通过<a target="_blank" rel="noopener" href="https://www.jianshu.com/p/6f8be3709003?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">率失真优化</a>（作为课外内容自行学习，这里不展开讨论）的方法来选择最优预测模式。</li>
</ul>
<p>为了让你更容易理解第三种方案，这里我稍微简单介绍一下率失真优化的思想。</p>
<p>我们知道预测之后经过 DCT 变换再量化会丢失高频信息。一般来说 QP 越大，丢失的信息越多，失真就越大，但是码流大小也越小；反之，QP 越小，丢失的信息越少，但是码流大小就越大。这是一个跷跷板。我们一般会在失真和码流大小之间平衡，尽量找到在一定码率下，失真最小的模式作为最优的预测模式，这就是率失真优化的思想。</p>
<p>其实还有很多不同的方案，比如有的为了加速模式选择的过程，率失真计算的时候，只会进行 DCT 变换和量化，不会进行熵编码。码流大小直接通过 QP 值估算或者使用预测模式的大小来代替。这些方案都可以，具体看编码器的实现。一般来说，选择过程越精细效果越好，但是速度会越慢。</p>
<p>通过上面讲的这些方法我们找到了每一个 4 x 4 块的最优模式之后，将这 16 个 4 x 4 块的 cost 加起来，与 16 x 16 块的最小 cost 对比，选择 cost 最小的块划分方式和预测模式作为帧内预测模式。</p>
<h1 id="三、小结"><a href="#三、小结" class="headerlink" title="三、小结"></a><font size=3>三、小结</font></h1><p>好了，今天的课到这里就要结束了。我们来回顾一下这节课的主要内容。</p>
<p>我们主要是一起聊了聊帧内预测。我们先详细讲述了有哪几种预测模式，以及各种预测模式的预测块的计算方法。同时强调一点，就是有的模式在参考像素不存在的时候是无效的，也就是不能使用的。这一点需要注意，并不是列举出来的每一个模式都是可以使用的。</p>
<p>为了方便你记忆，下面我把每一种块和子块支持的预测模式用一个表格来总结一下。</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/04%E9%9F%B3%E8%A7%86%E9%A2%91/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/LV03-%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81-03-%E5%B8%A7%E5%86%85%E9%A2%84%E6%B5%8B/img/eea93f2ace612181dfe81e34dd5e532d.jpg" alt="img" style="zoom:50%;" />

<p>最后，我们还简单介绍了一下预测模式的选择方法，主要有计算残差块绝对值之和、将残差块做 Hadamard 变换之后再求和、率失真优化等几种方案来得到 cost，然后我们取 cost 最小的模式作为帧内预测模式。</p>
<blockquote>
<p>思考题：在 H264 标准里面，视频的第一帧的第一个块应该怎么选择预测模式呢？</p>
<p>评论区答案：在 H264 标准里面，视频的第一帧的第一个块的左和上都是空，没法预测，所以设置成了一个约定值128，方便编码。这边找个几个264的码流，第一个I帧的第一个4*4 子块的yuv 预测值全都是128，大家也可以找个264的码流确认一下</p>
</blockquote>

    </div>

    
    
    

    <footer class="post-footer">




    <div>
        
            <div style="text-align:center;color: #ccc;font-size:14px;">
            ----------本文结束
            <i class="fas fa-fan fa-spin" style="color: #FF1493; font-size: 1rem"></i>
            感谢您的阅读----------
            </div>
        
    </div>





  
  <div class="my_post_copyright"> 
    <p><span>文章标题:</span><a href="/post/e4c325ee.html">LV03-视频编码-03-帧内预测</a></p>
    <p><span>文章作者:</span><a href="/" title="欢迎访问 《苏木》 的学习笔记">苏木</a></p>
    <p><span>发布时间:</span>2024年01月31日 - 07:44</p>
    <p><span>最后更新:</span>2025年06月14日 - 00:25</p>
    <p><span>原始链接:</span><a href="/post/e4c325ee.html" title="LV03-视频编码-03-帧内预测">https://sumumm.github.io/post/e4c325ee.html</a></p>
    <p><span>许可协议:</span><i class="fab fa-creative-commons"></i> <a rel="license" href= "https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank" title="Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)">署名-非商业性使用-禁止演绎 4.0 国际</a> 转载请保留原文链接及作者。</p>  
  </div>
  


          <div class="post-tags">
              <a href="/tags/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E6%94%BB%E5%85%8B%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/" rel="tag"><i class="fa fa-tag"></i> 极客时间-攻克视频技术</a>
          </div>

        

          <div class="post-nav">
            <div class="post-nav-item">
                <a href="/post/d93fe369.html" rel="prev" title="LV03-视频编码-04-帧间预测">
                  <i class="fa fa-angle-left"></i> LV03-视频编码-04-帧间预测
                </a>
            </div>
            <div class="post-nav-item">
                <a href="/post/79fa5b0b.html" rel="next" title="LV03-视频编码-02-码流结构">
                  LV03-视频编码-02-码流结构 <i class="fa fa-angle-right"></i>
                </a>
            </div>
          </div>
    </footer>
  </article>
</div>






</div>
  </main>

  <footer class="footer">
    <div class="footer-inner">

  <div class="copyright">
    &copy; 2017 – 
    <span itemprop="copyrightYear">2025</span>
    <span class="with-love">
      <i class="fa fa-heart"></i>
    </span>
    <span class="author" itemprop="copyrightHolder">苏木</span>
  </div>
<div class="wordcount">
  <span class="post-meta-item">
    <span class="post-meta-item-icon">
      <i class="fa fa-chart-line"></i>
    </span>
      <span>站点总字数：</span>
    <span title="站点总字数">3.7m</span>
  </span>
  <span class="post-meta-item">
    <span class="post-meta-item-icon">
      <i class="fa fa-coffee"></i>
    </span>
      <span>站点阅读时长 &asymp;</span>
    <span title="站点阅读时长">225:26</span>
  </span>
</div>




    <span id="sitetime"></span>
    <script defer language=javascript>
        function siteTime()
        {
            window.setTimeout("siteTime()", 1000);
            var seconds = 1000;
            var minutes = seconds * 60;
            var hours = minutes * 60;
            var days = hours * 24;
            var years = days * 365;
            var today = new Date();
            var todayYear = today.getFullYear();
            var todayMonth = today.getMonth()+1;
            var todayDate = today.getDate();
            var todayHour = today.getHours();
            var todayMinute = today.getMinutes();
            var todaySecond = today.getSeconds();
            /*==================================================
            Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
            year        - 作为date对象的年份，为4位年份值
            month       - 0-11之间的整数，做为date对象的月份
            day         - 1-31之间的整数，做为date对象的天数
            hours       - 0(午夜24点)-23之间的整数，做为date对象的小时数
            minutes     - 0-59之间的整数，做为date对象的分钟数
            seconds     - 0-59之间的整数，做为date对象的秒数
            microseconds - 0-999之间的整数，做为date对象的毫秒数
            ==================================================*/
            var t1 = Date.UTC(2017, 
                              5, 
                              19, 
                              0, 
                              0, 
                              0); //北京时间
            var t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond);
            var diff = t2-t1;
            var diffYears = Math.floor(diff/years);
            var diffDays = Math.floor((diff/days)-diffYears*365);
            var diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours);
            var diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes);
            var diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds);
            document.getElementById("sitetime").innerHTML="已在这里 "+diffYears+" 年 "+diffDays+" 天 "+diffHours+" 小时 "+diffMinutes+" 分钟 "+diffSeconds+" 秒";
        }
        siteTime();
    </script>



    </div>
  </footer>

  
  <div class="back-to-top" role="button" aria-label="返回顶部">
    <i class="fa fa-arrow-up fa-lg"></i>
    <span>0%</span>
  </div>
  <div class="reading-progress-bar"></div>

<noscript>
  <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>


  
  <script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/next-theme-pjax/0.6.0/pjax.min.js" integrity="sha256-vxLn1tSKWD4dqbMRyv940UYw4sXgMtYcK6reefzZrao=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/fancyapps-ui/5.0.28/fancybox/fancybox.umd.js" integrity="sha256-ytMJGN3toR+a84u7g7NuHm91VIR06Q41kMWDr2pq7Zo=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/lozad.js/1.16.0/lozad.min.js" integrity="sha256-mOFREFhqmHeQbXpK2lp4nA3qooVgACfh88fpJftLBbc=" crossorigin="anonymous"></script>
<script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/motion.js"></script><script src="/js/next-boot.js"></script><script src="/js/pjax.js"></script>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-generator-searchdb/1.4.1/search.js" integrity="sha256-1kfA5uHPf65M5cphT2dvymhkuyHPQp5A53EGZOnOLmc=" crossorigin="anonymous"></script>
<script src="/js/third-party/search/local-search.js"></script>




  <script src="/js/third-party/fancybox.js"></script>

  <script src="/js/third-party/pace.js"></script>


  




  

  <script class="next-config" data-name="enableMath" type="application/json">true</script><script class="next-config" data-name="mathjax" type="application/json">{"enable":true,"tags":"none","js":{"url":"https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.js","integrity":"sha256-MASABpB4tYktI2Oitl4t+78w/lyA+D7b/s9GEP0JOGI="}}</script>
<script src="/js/third-party/math/mathjax.js"></script>


 
        <div id="click-show-text"
            data-mobile = false
            data-text = 富强,民主,文明,和谐,自由,平等,公正,法制,爱国,敬业,诚信,友善
            data-fontsize = 15px
            data-random= false>
        </div>
       

      
        <script async src=https://cdn.jsdelivr.net/npm/hexo-next-mouse-effect@latest/click/showText.js></script>
      

      
    




    <script async src="/js/fancybox_param.js"></script>





<!-- APlayer本体 -->



</body>
</html>
